// 1.安装 redux 模块  cnpm i redux -S
// 2.引入模块
import { createStore } from 'redux'

// 3.创建reducer --- 纯函数  ---  输入一定，输出就一定确定
// 设置组件的初始化状态以及更新状态的标识， 返回新的值来表示新的状态
// const reducer = () => {}
// const reducer = (state = {}, action) => {} state 表示上一次的状态

const reducer = (state = {
  list: [1, 2, 3],
  a: 100
}, action) => {
  // action 表示修改状态的一个标识，一般有两个参数，
  // 一个是type
  // 一个是数据
  const { type, payload } = action

  // 业务逻辑
  switch (type) {
    case 'CHANGE_LIST':
      // 必须得写返回值，需要返回的是一个全新的对象
      // Object.assign() --- 合并对象 https://es6.ruanyifeng.com/#docs/object-methods#Object-assign
      // { ...state, list: payload }
      return { ...state, list: payload }
    case 'CHANGE_A':
      return Object.assign({}, state, { a: payload })
    default:
      return state // 如果没有匹配到 标识，那么就返回上一次的状态
  }
}

// 4.创建状态管理器
const store = createStore(reducer)

// 5.暴露模块
export default store